package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;

import mensagem.MsgCidade;
import session.SessionCidade;
import session.SessionEstado;
import entity.Cidade;
import entity.Estado;

@ManagedBean
@SessionScoped
public class BeanCidade {

	private Cidade cidade = new Cidade();

	private Estado estado = new Estado();

	private Cidade selected = new Cidade();

	private Cidade filtro = new Cidade();

	private HtmlInputText nomeEstado;

	private List<Cidade> cidades = new ArrayList<Cidade>();

	private SessionCidade session = new SessionCidade();

	private SessionEstado sessionE = new SessionEstado();

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public BeanCidade() throws Exception {
	}

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public HtmlInputText getNomeEstado() {
		return nomeEstado;
	}

	public void setNomeEstado(HtmlInputText nomeEstado) {
		this.nomeEstado = nomeEstado;
	}

	public SessionEstado getSessionE() {
		return sessionE;
	}

	public void setSessionE(SessionEstado sessionE) {
		this.sessionE = sessionE;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Cidade getSelected() {
		return selected;
	}

	public void setSelected(Cidade selected) {
		this.selected = selected;
	}

	public Cidade getFiltro() {
		return filtro;
	}

	public void setFiltro(Cidade filtro) {
		this.filtro = filtro;
	}

	public List<Cidade> getCidades() {
		return cidades;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public SessionCidade getSession() {
		return session;
	}

	public void setSession(SessionCidade session) {
		this.session = session;
	}

	// ******************************METODOS******************************
	// ***********************************************************************************
	// ******************************************************************************************

	public String save() throws Exception {
		if (this.cidade.getId() != null) {
			return this.update();
		}
		if (this.session.save(this.cidade)) {
			this.reinit();
			return MsgCidade.msgSave();
		}
		return "";
	}

	public String update() throws Exception {
		this.session.update(cidade, this.estado);
		this.reinit();
		return MsgCidade.msgUpdate();
	}

	public void reinit() {
		this.cidade = new Cidade();
		this.selected = new Cidade();
		this.cidades = new ArrayList<Cidade>();
		this.filtro = new Cidade();
		this.estado = new Estado();
	}

	public String remove() {
		try {
			this.session.remove(cidade);
			return MsgCidade.msgRemove();
		} catch (Exception e) {
			return MsgCidade.msgNotRemove();
		}
	}

	public void carregaCidade() throws Exception {
		this.cidades = this.session.getController().findList(this.getCidade());
	}

	public void find() throws Exception {
		this.cidades = this.session.getController().findList(filtro);
	}

	public String hotFind() throws Exception {
		if (this.cidade.getEstado() != null) {
			if ((this.cidade.getEstado().getId() != null)
					&& (this.cidade.getEstado().getEstado() != null)) {
				int aux = this.cidade.getEstado().getId();
				this.cidade.setEstado(new Estado());
				this.cidade.getEstado().setId(aux);
			}
		}

		if ((this.cidade.getEstado() != null) && (this.cidade.getEstado().getId() != null)) {
			try {
				this.cidade.setEstado(this.sessionE.getController().find(this.cidade.getEstado()));
			} catch (Exception e) {
				this.cidade.setEstado(new Estado());
			}
			if ((this.cidade.getEstado() != null) && (this.cidade.getEstado().getEstado() != null)) {
				this.nomeEstado.setValue(this.cidade.getEstado().getEstado());
				return null;
			}
		}
		this.cidade.setEstado(new Estado());
		return null;
	}
}